let l = [("Don",435.);("Nut",75.);("Toto",42.)];;
let l2 = [("don",543.56);("fillipo",674.23);("tototo",12.12)] ;;

let compare a b =
  if a > b then 1
  else if a = b then 0
  else -1
;;

let rec find nomclient listeclients =
    match listeclients with
      |[] ->failwith "n'est pas present dans la liste"
      |(nom,commandes)::liste ->
	if (String.lowercase nom) = (String.lowercase nomclient) then
	  commandes
	else find nomclient liste
;;



let rec add (nomclient,commandes) listeclients =
match listeclients with
  |[] ->(nomclient,commandes)::[]
  |(nom,com)::liste ->
    if (String.lowercase nomclient)=(String.lowercase nom) then
      (nom,com)::liste
    else if (String.lowercase nomclient)>(String.lowercase nom) then
      (nom,com)::add (nomclient,commandes) liste
    else (nomclient,commandes)::(nom,com)::liste
;;


let rec delete nomclient listeclient =
  match listeclient with
    |[] -> []
    |(nom,com)::liste -> 
      if (String.lowercase nomclient)=(String.lowercase nom) then
	liste
      else (nom,com)::delete nomclient liste
;;


let rec update nomclient newmontant listeclient =
  match listeclient with
    |[] -> listeclient
    |(nom,com)::liste ->
      if (String.lowercase nomclient)=(String.lowercase nom) then
	(nomclient,newmontant)::liste
      else (nom,com)::update nomclient newmontant liste
;;


let rec name anciennom newnom listeclient =
  match listeclient with
    |[] -> listeclient
    |(nom,com)::liste ->
      if (String.lowercase anciennom)=(String.lowercase nom) then
	(newnom,com)::liste
      else (nom,com)::name anciennom newnom liste
;;



let rec map fonctionaappliquer listeclient =
  match listeclient with
    |[]->[]
    |tete::liste ->
     fonctionaappliquer tete::map fonctionaappliquer liste
;;

let sales listeclient pourcentage =
  map ( function (nom,com) -> (nom,(com -.(com *. pourcentage /. 100.)))) listeclient
;;



let rec fusion listeclient listeclientah = match (listeclient , listeclientah) with
  |(liste,[]) -> liste
  |([],liste) -> liste
  |((nom1,com1)::liste1 , (nom2,com2)::liste2) -> 
    if (String.lowercase nom1) = (String.lowercase nom2) then
      (nom1 , com1 +. com2 )::(fusion liste1 liste2)
    else if (String.lowercase nom1)>(String.lowercase nom2) then
      (nom2,com2)::(fusion ((nom1,com1)::liste1) liste2)
    else (nom1,com1)::(fusion liste1 ((nom2,com2)::liste2))
;;




